package paquetDeCartes;

import java.util.ArrayList;

/** 
 * Défini un paquet de carte 
 * @version 1.1
 * @author sylvain
 */
public abstract class Paquet {

	protected ArrayList <CarteAJouer> monPaquet;
	protected int nbMax;
	protected int nbActuel;



	/** inverse la position de deux cartes dans le paquet */
	public void inverse2Cartes(int i, int j) {
		CarteAJouer tampon;
		tampon =  monPaquet.get(i);
		monPaquet.set(i, monPaquet.get(j));
		monPaquet.set(j, tampon);

	}

	/** Renvoie la première carte du paquet */
	public CarteAJouer getCarte(){
		if (nbActuel>0)
			return monPaquet.get(0);
		else
			return null;
	}

	/** Enlève la première carte du paquet et la renvoie */
	public CarteAJouer enleverCarte(){
		CarteAJouer laCarte=getCarte();
		if (laCarte!=null){
			nbActuel--;
			for (int i=0;i<nbActuel;i++){
				monPaquet.set(i, monPaquet.get(i+1));
			}
		}
		return laCarte;
	}

	public void ajouterCarte(CarteAJouer uneCarte){
		monPaquet.add(uneCarte);
		if (++nbActuel>nbMax) nbMax=nbActuel;
	}

	private int alea(int max) {
		return((int) (Math.random() * max + 1));
	}

	/** mélange le paquet de carte */
	public void retourner(){
		for (int i=0;i<nbActuel;i++){
			monPaquet.get(i).retournerCarte();
		}
	}

	/** mélange le paquet de carte */
	public void melanger(){
		int nb,x,y;
		nb = alea(100)+50;
		for (int i=0;i< nb; i++){
			x = alea(nbMax-1);
			y = alea(nbMax-1);
			inverse2Cartes(x, y);
		}
	}
	/** renvoie une chaine contenant tout le paquet de carte */
	public String toString() {
		String aRetourner ="";
		for (int i=0;i<nbActuel;i++){
			aRetourner = aRetourner + monPaquet.get(i).toString() + "  ";
			if ((i+1) % (nbMax/4)==0)
				aRetourner += "\n";
		}
		return aRetourner;
	}

}
